注册url的新方法


  • rest-framework 提供了新的url注册方法

  • 使用前提: 视图类必须继承 ModelViewSet(即: 必须使用视图四部曲中的终极版)

  • rest-framework 的url注册方法会在原本的两条url基础上在添加多两条url

# urls.py

from django.conf.urls import url, include
from django.contrib import admin
from app01.views import *

from rest_framework import routers

# 实例化默认路由对象
router = routers.DefaultRouter()
# 注册路由:
# 默认路由对象.register('url前缀', 视图类)
    # url前缀是一个字符串,而不是一个url正则路径
router.register(r'book', BookViewSet)
router.register(r'publish', PublishViewSet)

urlpatterns = [
url(r'', include(router.urls))# 注册路由
    url(r'login', LoginView.as_view()),
]

  • 所生成的url正则路径

^book/$ [name='book-list']  # 平时我们使用的操作或查看所有数据的url
^book\.(?P<format>[a-z0-9]+)/?$ [name='book-list']  # rest-framework 新增的
^book/(?P<pk>[^/.]+)/$ [name='book-detail']  # 平时我们使用的操作或查看指定数据的url
^book/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$ [name='book-detail']  # rest-framework 新增的

^publish/$ [name='publish-list']  # 平时我们使用的操作或查看所有数据的url
^publish\.(?P<format>[a-z0-9]+)/?$ [name='publish-list']  # rest-framework 新增的
^publish/(?P<pk>[^/.]+)/$ [name='publish-detail']  # 平时我们使用的操作或查看指定数据的url
^publish/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$ [name='publish-detail']  # rest-framework 新增的

  • 所生成url路径

http://127.0.0.1:8000/book/
http://127.0.0.1:8000/book.json
http://127.0.0.1:8000/book/2/
http://127.0.0.1:8000/book/2.json

http://127.0.0.1:8000/publish/
http://127.0.0.1:8000/publish.json
http://127.0.0.1:8000/publish/1/
http://127.0.0.1:8000/publish/1.json

# 在url正则路径中没有,但是 rest-framework 默认添加上的url路径

http://127.0.0.1:8000/book/?format=api
http://127.0.0.1:8000/book/?format=json

http://127.0.0.1:8000/book/2/?format=api
http://127.0.0.1:8000/book/2/?format=json